
 1000         .OR $803
 1010  *--------------------------------
 1020  *
 1030  * ALPHONSE - MULTI-LINGUAL TEXT EDITOR
 1040  *
 1050  * Chopped up to show ERROR trapping
 1060  *  ala Applesoft ONERR command.
 1070  *  NOTE: There is no RESUME but
 1080  *  you are able to easily pick
 1090  *  up DOS errors and handle them
 1100  *  while disabling the RESET
 1110  *  (on AutoStart ROM).
 1120  *
 1130  * by Lee Meador
 1140  *
 1150  *      MACH - Main program entry
 1160  *      REENT- Program re-entry
 1170  *      ULOOP- Main program loop
 1180  *      MY.RESET- handle RESET key pushed
 1190  *      MY.ERROR- default error handler
 1200  *      END  - Exit to BASIC
 1210  *      SETUP.DOS.TABLE- hook in RESET trapping
 1220  *      ON.ERROR - set error trap
 1230  *      OFF.ERROR- kill error trap
 1240  *      CLEAR.ERROR- init error flags
 1250  *      LOOK.FOR.FILE- find S,D of FILE
 1260  *      MY.TABLE - copied into DOS table
 1270  *
 1280  *--------------------------------
 1290  DOS.TABLE .EQ $9D56
 1300  HOME.TEXT .EQ $FC58
 1310  TMP1      .EQ 0     PAGE 0
 1320  *--------------------------------
 1330  *
 1340  * THIS IS THE MAIN ENTRY POINT
 1350  *  FOR ALPHONSE.
 1360  *
 1370  *--------------------------------
 1380  MACH   JSR SETUP.DOS.TABLE
 1390         JSR CLEAR.ERROR  NO ONERR
 1400         LDA #MY.ERROR    THEN SET IT
 1410         LDY /MY.ERROR    .. TO MY.ERROR
 1420         JSR ON.ERROR
 1430         JSR HOME.TEXT CLR TXT SCR
 1440  *->->->->->->->->->->->->->->->->
 1450  * DO INITIALIZE PROCESSING
 1460  *->->->->->->->->->->->->->->->->
 1470         JSR OFF.ERROR ON ERR TURNED OFF
 1480  *--------------------------------
 1490  * RE-ENTRY POINT. NORMAL ENTRY COMES HERE TOO
 1500  *--------------------------------
 1510  REENT  JSR SETUP.DOS.TABLE
 1520         JSR CLEAR.ERROR NO ON ERR
 1530  .10    JSR LOOK.FOR.FILE
 1540         BCC LOAD.FILE
 1550         LDA #MY.ERROR     SET ERROR
 1560         LDY /MY.ERROR     .. TO MY.ERROR
 1570         JSR ON.ERROR
 1580         JSR HOME.TEXT CLEAR SCRN
 1590  *->->->->->->->->->->->->->->->->
 1600  * PRINT "INSERT CORRECT DISK"
 1610  *->->->->->->->->->->->->->->->->
 1620         JMP .10       TRY AGAIN TO FIND TEXT.DIR
 1630  *--------------------------------
 1640  LOAD.FILE
 1650         LDA #MY.ERROR FIX ERROR HANDLER
 1660         LDY /MY.ERROR
 1670         JSR ON.ERROR
 1680  *->->->->->->->->->->->->->->->->
 1690  * THE REST OF INITIALIZING
 1700  *->->->->->->->->->->->->->->->->
 1710   
 1720  ULOOP
 1730  *->->->->->->->->->->->->->->->->
 1740  * MAIN PROGRAM LOOP DOES EACH
 1750  *  COMMAND TYPED
 1760  * EXIT COMMAND JUMPS TO "END"
 1770  *->->->->->->->->->->->->->->->->
 1780         JMP ULOOP    .. LOOP IF UNDEF
 1790  *--------------------------------
 1800  *
 1810  * ROUTINE TO HANDLE USER HITTING
 1820  *  RESET. (HANDLED IN DOS--DOS
 1830  *  FIXES IT ON $3D3 EXIT.)
 1840  * NO HOOKS TO CHANGE AND FIX BACK
 1850  *
 1860  *--------------------------------
 1870   
 1880  MY.RESET
 1890  *->->->->->->->->->->->->->->->->
 1900  * RESET POINTERS AND HIRES PAGE2
 1910  *->->->->->->->->->->->->->->->->
 1920         JMP ULOOP
 1930   
 1940  *--------------------------------
 1950  *
 1960  * MY GENERAL ERROR HANDLER JUST
 1970  *  PRINTS "ERROR NUMBER " AND 
 1980  *  THE NUMBER FOR THE ERROR THEN
 1990  *  EXITS TO WHATEVER BASIC WAS
 2000  *  RUNNING BEFORE.
 2010  *
 2020  *--------------------------------
 2030  MY.ERROR
 2040         TXA          SAVE ERR NUM
 2050         PHA
 2060  *->->->->->->->->->->->->->->->->
 2070  * HOME SCREEN AND PRINT THE
 2080  *  MESSAGE "ERROR NUMBER "
 2090  *->->->->->->->->->->->->->->->->
 2100         PLA          ERR NUMBER
 2110  *->->->->->->->->->->->->->->->->
 2120  * PRINT ACC AS DECIMAL NUMBER
 2130  *  FOLLOWED BY A <RETURN>
 2140  *->->->->->->->->->->->->->->->->
 2150  END    JSR OFF.ERROR FIX UP $AAB6
 2160         JMP $3D3      HARD EXIT RESTORS DOS.TABLE
 2170  *--------------------------------
 2180  *
 2190  * COPY MY ADDRESSES INTO THE DOS
 2200  *  TABLE OF JUMPS (AT $9D56).
 2210  *
 2220  *--------------------------------
 2230  SETUP.DOS.TABLE
 2240         LDX #12      12 BYTES
 2250  .10    LDA MY.TABLE-1,X
 2260         STA DOS.TABLE-1,X
 2270         DEX
 2280         BNE .10
 2290         RTS
 2300  *--------------------------------
 2310  *
 2320  * DOS ERROR SETUP/RESET
 2330  *
 2340  *  CALL CLEAR.ERROR AT START OF
 2350  *   PROGRAM TO SET UP FLAG
 2360  *   (ITS ALSO OK AFTER OFF.ERROR)
 2370  *  CALL ON.ERROR WITH A,Y HOLDING
 2380  *   THE ADDRESS YOU WANT TO JUMP
 2390  *   TO IF A DOS ERROR OCCURS.
 2400  *  CALL OFF.ERROR TO CANCEL ERROR
 2410  *   TRAPPING AND REVERT TO NORMAL
 2420  *   ERROR MSG AND JUMP TO BASIC
 2430  *
 2440  *  WHEN THE ERROR ROUTINE IS
 2450  *   CALLED (ON AN ERROR) THE X
 2460  *   REGISTER HOLDS THE ERROR
 2470  *   NUMBER AS LISTED P 114-115 OF
 2480  *   THE DOS MANUAL.
 2490  *
 2500  *  AN ERROR WILL CAUSE THE STACK
 2510  *   TO BE MESSED UP. SO, SAVE IT
 2520  *   WHEN YOU EXPECT ERRORS.
 2530  *
 2540  *--------------------------------
 2550  ON.ERROR
 2560         STA DOS.TABLE+4
 2570         STY DOS.TABLE+5
 2580         LDA SAVE.AAB6     48K ONLY
 2590         BNE .10
 2600         LDX $AAB6         48K ONLY !!!!!
 2610         DEX
 2620         STX SAVE.AAB6     48K ONLY
 2630  .10    LDA #$40     PRETEND AS(])
 2640         STA $AAB6         48K ONLY
 2650         ASL          $80
 2660         STA $D8      ONERR ACTIVE
 2670         ASL          $00
 2680         STA $76      AS(]) RUNNING
 2690         STA $33       (REALLY)
 2700         RTS
 2710  OFF.ERROR
 2720         LDX SAVE.AAB6
 2730         BEQ CLEAR.ERROR   ZERO->NEVER SET
 2740         INX
 2750         STX $AAB6         48K ONLY
 2760  CLEAR.ERROR
 2770         LDA #0            CLEAR FLAGS
 2780         STA SAVE.AAB6
 2790         STA $D8           CLEAR ONERR FLAG
 2800         RTS
 2810  *--------------------------------
 2820  SAVE.AAB6 .HS 00    FLAG
 2830  *--------------------------------
 2840  *
 2850  * LOOK FOR FILE ON VARIOUS DRIVES
 2860  *
 2870  *  RETURNS CARRY CLEAR IF FOUND
 2880  *   AND SET IF NOT. USES RENAME
 2890  *   FILE,FILE TO SEE IF FILE EXISTS
 2900  *
 2910  *--------------------------------
 2920  LOOK.FOR.FILE
 2930         TSX          SAVE STACK
 2940         STX LOOK.STACK
 2950         LDA #LOOK.ERR
 2960         LDY /LOOK.ERR
 2970         JSR ON.ERROR
 2980         LDA #0       TABLE OFFSET
 2990         STA LOOK.CNT
 3000  *--------------------------------
 3010  LOOK.LOOP
 3020         LDX LOOK.CNT
 3030         CPX LOOK.MAX (# OF TRYS)
 3040         BCS .99      FAIL EXIT
 3050  *->->->->->->->->->->->->->->->->
 3060  * CHECK FOR DISK CARD IN SLOT
 3070  *  SO THINGS WON'T HANG. FIRST,
 3080  *  LOAD THE ACC WITH THE SLOT
 3090  *  THEN ...
 3100  *->->->->->->->->->->->->->->->->
 3110   
 3120         AND #$07     SLOT #
 3130         ORA #$C0
 3140         STA TMP1+1
 3150         LDA #0
 3160         STA TMP1     TMP1=CS00
 3170  * TMP1 IS SLOT ADDRESS
 3180  * CHECK BYTES 7,5,3,1 FOR MATCH
 3190  *  AS AUTO MONITOR DOES
 3200         LDY #$07     SAME AS MONITOR ($FABA AUTO)
 3210  .10    LDA (TMP1),Y FETCH SLOT BYTE
 3220         CMP DISKID-1,Y  IS IT DISK?
 3230         BNE LOOK.ERR NOPE...
 3240         DEY          DOWN TWO
 3250         DEY
 3260         BPL .10      AND LOOP
 3270  * THERE IS A DISK CARD THERE
 3280  *--------------------------------
 3290  *->->->->->->->->->->->->->->->->
 3300  * PRINT OUT CTRL-D THEN "RENAME
 3310  *  FILE,FILE,SX,DX" FILLING IN
 3320  *  X ACCORDING TO THE VALUE OF
 3330  *  LOOK.CNT
 3340  *->->->->->->->->->->->->->->->->
 3350         CLC          FOUND IT
 3360  .99    LDX LOOK.STACK
 3370         TXS          RESTORE STACK
 3380         RTS
 3390  *--------------------------------
 3400  * COME HERE IF DOS COMMAND FAILS
 3410  *--------------------------------
 3420  LOOK.ERR
 3430         INC LOOK.CNT
 3440         JMP LOOK.LOOP
 3450  *--------------------------------
 3460  LOOK.MAX   .DA #6
 3470  LOOK.CNT   .BS 1
 3480  LOOK.STACK .BS 1
 3490  *--------------------------------
 3500  DISKID     .HS 20FF00FF03FF3C MATCHES DISK CARD+1 TO 7
 3510  *--------------------------------
 3520  *
 3530  * TABLE OF ERR/RESET ADDRESSES
 3540  *
 3550  *--------------------------------
 3560  MY.TABLE .DA MY.RESET
 3570           .DA MY.RESET
 3580           .DA MY.ERROR
 3590           .DA $E000
 3600           .DA MY.RESET
 3610           .DA MY.RESET
 3620         .EN

